/**
 * <copyright>
 * </copyright>
 *
 * $Id$
 */
package EA_Model.IEC61970.Generation.Production.impl;

import EA_Model.IEC61970.Core.impl.PowerSystemResourceImpl;

import EA_Model.IEC61970.Domain.Length;
import EA_Model.IEC61970.Domain.Seconds;
import EA_Model.IEC61970.Domain.Volume;
import EA_Model.IEC61970.Domain.WaterLevel;

import EA_Model.IEC61970.Generation.Production.ProductionPackage;
import EA_Model.IEC61970.Generation.Production.Reservoir;
import EA_Model.IEC61970.Generation.Production.SpillwayGateType;

import org.eclipse.emf.common.notify.Notification;

import org.eclipse.emf.ecore.EClass;
import org.eclipse.emf.ecore.InternalEObject;

import org.eclipse.emf.ecore.impl.ENotificationImpl;

/**
 * <!-- begin-user-doc -->
 * An implementation of the model object '<em><b>Reservoir</b></em>'.
 * <!-- end-user-doc -->
 * <p>
 * The following features are implemented:
 * <ul>
 *   <li>{@link EA_Model.IEC61970.Generation.Production.impl.ReservoirImpl#getActiveStorageCapacity <em>Active Storage Capacity</em>}</li>
 *   <li>{@link EA_Model.IEC61970.Generation.Production.impl.ReservoirImpl#getEnergyStorageRating <em>Energy Storage Rating</em>}</li>
 *   <li>{@link EA_Model.IEC61970.Generation.Production.impl.ReservoirImpl#getFullSupplyLevel <em>Full Supply Level</em>}</li>
 *   <li>{@link EA_Model.IEC61970.Generation.Production.impl.ReservoirImpl#getGrossCapacity <em>Gross Capacity</em>}</li>
 *   <li>{@link EA_Model.IEC61970.Generation.Production.impl.ReservoirImpl#getNormalMinOperateLevel <em>Normal Min Operate Level</em>}</li>
 *   <li>{@link EA_Model.IEC61970.Generation.Production.impl.ReservoirImpl#getRiverOutletWorks <em>River Outlet Works</em>}</li>
 *   <li>{@link EA_Model.IEC61970.Generation.Production.impl.ReservoirImpl#getSpillTravelDelay <em>Spill Travel Delay</em>}</li>
 *   <li>{@link EA_Model.IEC61970.Generation.Production.impl.ReservoirImpl#getSpillwayCapacity <em>Spillway Capacity</em>}</li>
 *   <li>{@link EA_Model.IEC61970.Generation.Production.impl.ReservoirImpl#getSpillwayCrestLength <em>Spillway Crest Length</em>}</li>
 *   <li>{@link EA_Model.IEC61970.Generation.Production.impl.ReservoirImpl#getSpillwayCrestLevel <em>Spillway Crest Level</em>}</li>
 *   <li>{@link EA_Model.IEC61970.Generation.Production.impl.ReservoirImpl#getSpillWayGateType <em>Spill Way Gate Type</em>}</li>
 * </ul>
 * </p>
 *
 * @generated
 */
public class ReservoirImpl extends PowerSystemResourceImpl implements Reservoir {
	/**
	 * The cached value of the '{@link #getActiveStorageCapacity() <em>Active Storage Capacity</em>}' reference.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getActiveStorageCapacity()
	 * @generated
	 * @ordered
	 */
	protected Volume activeStorageCapacity;

	/**
	 * The cached value of the '{@link #getEnergyStorageRating() <em>Energy Storage Rating</em>}' reference.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getEnergyStorageRating()
	 * @generated
	 * @ordered
	 */
	protected EA_Model.IEC61970.Domain.Float energyStorageRating;

	/**
	 * The cached value of the '{@link #getFullSupplyLevel() <em>Full Supply Level</em>}' reference.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getFullSupplyLevel()
	 * @generated
	 * @ordered
	 */
	protected WaterLevel fullSupplyLevel;

	/**
	 * The cached value of the '{@link #getGrossCapacity() <em>Gross Capacity</em>}' reference.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getGrossCapacity()
	 * @generated
	 * @ordered
	 */
	protected Volume grossCapacity;

	/**
	 * The cached value of the '{@link #getNormalMinOperateLevel() <em>Normal Min Operate Level</em>}' reference.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getNormalMinOperateLevel()
	 * @generated
	 * @ordered
	 */
	protected WaterLevel normalMinOperateLevel;

	/**
	 * The cached value of the '{@link #getRiverOutletWorks() <em>River Outlet Works</em>}' reference.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getRiverOutletWorks()
	 * @generated
	 * @ordered
	 */
	protected EA_Model.IEC61970.Domain.String riverOutletWorks;

	/**
	 * The cached value of the '{@link #getSpillTravelDelay() <em>Spill Travel Delay</em>}' reference.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getSpillTravelDelay()
	 * @generated
	 * @ordered
	 */
	protected Seconds spillTravelDelay;

	/**
	 * The cached value of the '{@link #getSpillwayCapacity() <em>Spillway Capacity</em>}' reference.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getSpillwayCapacity()
	 * @generated
	 * @ordered
	 */
	protected EA_Model.IEC61970.Domain.Float spillwayCapacity;

	/**
	 * The cached value of the '{@link #getSpillwayCrestLength() <em>Spillway Crest Length</em>}' reference.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getSpillwayCrestLength()
	 * @generated
	 * @ordered
	 */
	protected Length spillwayCrestLength;

	/**
	 * The cached value of the '{@link #getSpillwayCrestLevel() <em>Spillway Crest Level</em>}' reference.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getSpillwayCrestLevel()
	 * @generated
	 * @ordered
	 */
	protected WaterLevel spillwayCrestLevel;

	/**
	 * The default value of the '{@link #getSpillWayGateType() <em>Spill Way Gate Type</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getSpillWayGateType()
	 * @generated
	 * @ordered
	 */
	protected static final SpillwayGateType SPILL_WAY_GATE_TYPE_EDEFAULT = null;

	/**
	 * The cached value of the '{@link #getSpillWayGateType() <em>Spill Way Gate Type</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getSpillWayGateType()
	 * @generated
	 * @ordered
	 */
	protected SpillwayGateType spillWayGateType = SPILL_WAY_GATE_TYPE_EDEFAULT;

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	protected ReservoirImpl() {
		super();
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	@Override
	protected EClass eStaticClass() {
		return ProductionPackage.Literals.RESERVOIR;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public Volume getActiveStorageCapacity() {
		if (activeStorageCapacity != null && activeStorageCapacity.eIsProxy()) {
			InternalEObject oldActiveStorageCapacity = (InternalEObject)activeStorageCapacity;
			activeStorageCapacity = (Volume)eResolveProxy(oldActiveStorageCapacity);
			if (activeStorageCapacity != oldActiveStorageCapacity) {
				if (eNotificationRequired())
					eNotify(new ENotificationImpl(this, Notification.RESOLVE, ProductionPackage.RESERVOIR__ACTIVE_STORAGE_CAPACITY, oldActiveStorageCapacity, activeStorageCapacity));
			}
		}
		return activeStorageCapacity;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public Volume basicGetActiveStorageCapacity() {
		return activeStorageCapacity;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public void setActiveStorageCapacity(Volume newActiveStorageCapacity) {
		Volume oldActiveStorageCapacity = activeStorageCapacity;
		activeStorageCapacity = newActiveStorageCapacity;
		if (eNotificationRequired())
			eNotify(new ENotificationImpl(this, Notification.SET, ProductionPackage.RESERVOIR__ACTIVE_STORAGE_CAPACITY, oldActiveStorageCapacity, activeStorageCapacity));
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EA_Model.IEC61970.Domain.Float getEnergyStorageRating() {
		if (energyStorageRating != null && energyStorageRating.eIsProxy()) {
			InternalEObject oldEnergyStorageRating = (InternalEObject)energyStorageRating;
			energyStorageRating = (EA_Model.IEC61970.Domain.Float)eResolveProxy(oldEnergyStorageRating);
			if (energyStorageRating != oldEnergyStorageRating) {
				if (eNotificationRequired())
					eNotify(new ENotificationImpl(this, Notification.RESOLVE, ProductionPackage.RESERVOIR__ENERGY_STORAGE_RATING, oldEnergyStorageRating, energyStorageRating));
			}
		}
		return energyStorageRating;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EA_Model.IEC61970.Domain.Float basicGetEnergyStorageRating() {
		return energyStorageRating;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public void setEnergyStorageRating(EA_Model.IEC61970.Domain.Float newEnergyStorageRating) {
		EA_Model.IEC61970.Domain.Float oldEnergyStorageRating = energyStorageRating;
		energyStorageRating = newEnergyStorageRating;
		if (eNotificationRequired())
			eNotify(new ENotificationImpl(this, Notification.SET, ProductionPackage.RESERVOIR__ENERGY_STORAGE_RATING, oldEnergyStorageRating, energyStorageRating));
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public WaterLevel getFullSupplyLevel() {
		if (fullSupplyLevel != null && fullSupplyLevel.eIsProxy()) {
			InternalEObject oldFullSupplyLevel = (InternalEObject)fullSupplyLevel;
			fullSupplyLevel = (WaterLevel)eResolveProxy(oldFullSupplyLevel);
			if (fullSupplyLevel != oldFullSupplyLevel) {
				if (eNotificationRequired())
					eNotify(new ENotificationImpl(this, Notification.RESOLVE, ProductionPackage.RESERVOIR__FULL_SUPPLY_LEVEL, oldFullSupplyLevel, fullSupplyLevel));
			}
		}
		return fullSupplyLevel;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public WaterLevel basicGetFullSupplyLevel() {
		return fullSupplyLevel;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public void setFullSupplyLevel(WaterLevel newFullSupplyLevel) {
		WaterLevel oldFullSupplyLevel = fullSupplyLevel;
		fullSupplyLevel = newFullSupplyLevel;
		if (eNotificationRequired())
			eNotify(new ENotificationImpl(this, Notification.SET, ProductionPackage.RESERVOIR__FULL_SUPPLY_LEVEL, oldFullSupplyLevel, fullSupplyLevel));
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public Volume getGrossCapacity() {
		if (grossCapacity != null && grossCapacity.eIsProxy()) {
			InternalEObject oldGrossCapacity = (InternalEObject)grossCapacity;
			grossCapacity = (Volume)eResolveProxy(oldGrossCapacity);
			if (grossCapacity != oldGrossCapacity) {
				if (eNotificationRequired())
					eNotify(new ENotificationImpl(this, Notification.RESOLVE, ProductionPackage.RESERVOIR__GROSS_CAPACITY, oldGrossCapacity, grossCapacity));
			}
		}
		return grossCapacity;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public Volume basicGetGrossCapacity() {
		return grossCapacity;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public void setGrossCapacity(Volume newGrossCapacity) {
		Volume oldGrossCapacity = grossCapacity;
		grossCapacity = newGrossCapacity;
		if (eNotificationRequired())
			eNotify(new ENotificationImpl(this, Notification.SET, ProductionPackage.RESERVOIR__GROSS_CAPACITY, oldGrossCapacity, grossCapacity));
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public WaterLevel getNormalMinOperateLevel() {
		if (normalMinOperateLevel != null && normalMinOperateLevel.eIsProxy()) {
			InternalEObject oldNormalMinOperateLevel = (InternalEObject)normalMinOperateLevel;
			normalMinOperateLevel = (WaterLevel)eResolveProxy(oldNormalMinOperateLevel);
			if (normalMinOperateLevel != oldNormalMinOperateLevel) {
				if (eNotificationRequired())
					eNotify(new ENotificationImpl(this, Notification.RESOLVE, ProductionPackage.RESERVOIR__NORMAL_MIN_OPERATE_LEVEL, oldNormalMinOperateLevel, normalMinOperateLevel));
			}
		}
		return normalMinOperateLevel;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public WaterLevel basicGetNormalMinOperateLevel() {
		return normalMinOperateLevel;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public void setNormalMinOperateLevel(WaterLevel newNormalMinOperateLevel) {
		WaterLevel oldNormalMinOperateLevel = normalMinOperateLevel;
		normalMinOperateLevel = newNormalMinOperateLevel;
		if (eNotificationRequired())
			eNotify(new ENotificationImpl(this, Notification.SET, ProductionPackage.RESERVOIR__NORMAL_MIN_OPERATE_LEVEL, oldNormalMinOperateLevel, normalMinOperateLevel));
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EA_Model.IEC61970.Domain.String getRiverOutletWorks() {
		if (riverOutletWorks != null && riverOutletWorks.eIsProxy()) {
			InternalEObject oldRiverOutletWorks = (InternalEObject)riverOutletWorks;
			riverOutletWorks = (EA_Model.IEC61970.Domain.String)eResolveProxy(oldRiverOutletWorks);
			if (riverOutletWorks != oldRiverOutletWorks) {
				if (eNotificationRequired())
					eNotify(new ENotificationImpl(this, Notification.RESOLVE, ProductionPackage.RESERVOIR__RIVER_OUTLET_WORKS, oldRiverOutletWorks, riverOutletWorks));
			}
		}
		return riverOutletWorks;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EA_Model.IEC61970.Domain.String basicGetRiverOutletWorks() {
		return riverOutletWorks;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public void setRiverOutletWorks(EA_Model.IEC61970.Domain.String newRiverOutletWorks) {
		EA_Model.IEC61970.Domain.String oldRiverOutletWorks = riverOutletWorks;
		riverOutletWorks = newRiverOutletWorks;
		if (eNotificationRequired())
			eNotify(new ENotificationImpl(this, Notification.SET, ProductionPackage.RESERVOIR__RIVER_OUTLET_WORKS, oldRiverOutletWorks, riverOutletWorks));
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public Seconds getSpillTravelDelay() {
		if (spillTravelDelay != null && spillTravelDelay.eIsProxy()) {
			InternalEObject oldSpillTravelDelay = (InternalEObject)spillTravelDelay;
			spillTravelDelay = (Seconds)eResolveProxy(oldSpillTravelDelay);
			if (spillTravelDelay != oldSpillTravelDelay) {
				if (eNotificationRequired())
					eNotify(new ENotificationImpl(this, Notification.RESOLVE, ProductionPackage.RESERVOIR__SPILL_TRAVEL_DELAY, oldSpillTravelDelay, spillTravelDelay));
			}
		}
		return spillTravelDelay;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public Seconds basicGetSpillTravelDelay() {
		return spillTravelDelay;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public void setSpillTravelDelay(Seconds newSpillTravelDelay) {
		Seconds oldSpillTravelDelay = spillTravelDelay;
		spillTravelDelay = newSpillTravelDelay;
		if (eNotificationRequired())
			eNotify(new ENotificationImpl(this, Notification.SET, ProductionPackage.RESERVOIR__SPILL_TRAVEL_DELAY, oldSpillTravelDelay, spillTravelDelay));
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EA_Model.IEC61970.Domain.Float getSpillwayCapacity() {
		if (spillwayCapacity != null && spillwayCapacity.eIsProxy()) {
			InternalEObject oldSpillwayCapacity = (InternalEObject)spillwayCapacity;
			spillwayCapacity = (EA_Model.IEC61970.Domain.Float)eResolveProxy(oldSpillwayCapacity);
			if (spillwayCapacity != oldSpillwayCapacity) {
				if (eNotificationRequired())
					eNotify(new ENotificationImpl(this, Notification.RESOLVE, ProductionPackage.RESERVOIR__SPILLWAY_CAPACITY, oldSpillwayCapacity, spillwayCapacity));
			}
		}
		return spillwayCapacity;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EA_Model.IEC61970.Domain.Float basicGetSpillwayCapacity() {
		return spillwayCapacity;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public void setSpillwayCapacity(EA_Model.IEC61970.Domain.Float newSpillwayCapacity) {
		EA_Model.IEC61970.Domain.Float oldSpillwayCapacity = spillwayCapacity;
		spillwayCapacity = newSpillwayCapacity;
		if (eNotificationRequired())
			eNotify(new ENotificationImpl(this, Notification.SET, ProductionPackage.RESERVOIR__SPILLWAY_CAPACITY, oldSpillwayCapacity, spillwayCapacity));
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public Length getSpillwayCrestLength() {
		if (spillwayCrestLength != null && spillwayCrestLength.eIsProxy()) {
			InternalEObject oldSpillwayCrestLength = (InternalEObject)spillwayCrestLength;
			spillwayCrestLength = (Length)eResolveProxy(oldSpillwayCrestLength);
			if (spillwayCrestLength != oldSpillwayCrestLength) {
				if (eNotificationRequired())
					eNotify(new ENotificationImpl(this, Notification.RESOLVE, ProductionPackage.RESERVOIR__SPILLWAY_CREST_LENGTH, oldSpillwayCrestLength, spillwayCrestLength));
			}
		}
		return spillwayCrestLength;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public Length basicGetSpillwayCrestLength() {
		return spillwayCrestLength;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public void setSpillwayCrestLength(Length newSpillwayCrestLength) {
		Length oldSpillwayCrestLength = spillwayCrestLength;
		spillwayCrestLength = newSpillwayCrestLength;
		if (eNotificationRequired())
			eNotify(new ENotificationImpl(this, Notification.SET, ProductionPackage.RESERVOIR__SPILLWAY_CREST_LENGTH, oldSpillwayCrestLength, spillwayCrestLength));
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public WaterLevel getSpillwayCrestLevel() {
		if (spillwayCrestLevel != null && spillwayCrestLevel.eIsProxy()) {
			InternalEObject oldSpillwayCrestLevel = (InternalEObject)spillwayCrestLevel;
			spillwayCrestLevel = (WaterLevel)eResolveProxy(oldSpillwayCrestLevel);
			if (spillwayCrestLevel != oldSpillwayCrestLevel) {
				if (eNotificationRequired())
					eNotify(new ENotificationImpl(this, Notification.RESOLVE, ProductionPackage.RESERVOIR__SPILLWAY_CREST_LEVEL, oldSpillwayCrestLevel, spillwayCrestLevel));
			}
		}
		return spillwayCrestLevel;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public WaterLevel basicGetSpillwayCrestLevel() {
		return spillwayCrestLevel;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public void setSpillwayCrestLevel(WaterLevel newSpillwayCrestLevel) {
		WaterLevel oldSpillwayCrestLevel = spillwayCrestLevel;
		spillwayCrestLevel = newSpillwayCrestLevel;
		if (eNotificationRequired())
			eNotify(new ENotificationImpl(this, Notification.SET, ProductionPackage.RESERVOIR__SPILLWAY_CREST_LEVEL, oldSpillwayCrestLevel, spillwayCrestLevel));
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public SpillwayGateType getSpillWayGateType() {
		return spillWayGateType;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public void setSpillWayGateType(SpillwayGateType newSpillWayGateType) {
		SpillwayGateType oldSpillWayGateType = spillWayGateType;
		spillWayGateType = newSpillWayGateType == null ? SPILL_WAY_GATE_TYPE_EDEFAULT : newSpillWayGateType;
		if (eNotificationRequired())
			eNotify(new ENotificationImpl(this, Notification.SET, ProductionPackage.RESERVOIR__SPILL_WAY_GATE_TYPE, oldSpillWayGateType, spillWayGateType));
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	@Override
	public Object eGet(int featureID, boolean resolve, boolean coreType) {
		switch (featureID) {
			case ProductionPackage.RESERVOIR__ACTIVE_STORAGE_CAPACITY:
				if (resolve) return getActiveStorageCapacity();
				return basicGetActiveStorageCapacity();
			case ProductionPackage.RESERVOIR__ENERGY_STORAGE_RATING:
				if (resolve) return getEnergyStorageRating();
				return basicGetEnergyStorageRating();
			case ProductionPackage.RESERVOIR__FULL_SUPPLY_LEVEL:
				if (resolve) return getFullSupplyLevel();
				return basicGetFullSupplyLevel();
			case ProductionPackage.RESERVOIR__GROSS_CAPACITY:
				if (resolve) return getGrossCapacity();
				return basicGetGrossCapacity();
			case ProductionPackage.RESERVOIR__NORMAL_MIN_OPERATE_LEVEL:
				if (resolve) return getNormalMinOperateLevel();
				return basicGetNormalMinOperateLevel();
			case ProductionPackage.RESERVOIR__RIVER_OUTLET_WORKS:
				if (resolve) return getRiverOutletWorks();
				return basicGetRiverOutletWorks();
			case ProductionPackage.RESERVOIR__SPILL_TRAVEL_DELAY:
				if (resolve) return getSpillTravelDelay();
				return basicGetSpillTravelDelay();
			case ProductionPackage.RESERVOIR__SPILLWAY_CAPACITY:
				if (resolve) return getSpillwayCapacity();
				return basicGetSpillwayCapacity();
			case ProductionPackage.RESERVOIR__SPILLWAY_CREST_LENGTH:
				if (resolve) return getSpillwayCrestLength();
				return basicGetSpillwayCrestLength();
			case ProductionPackage.RESERVOIR__SPILLWAY_CREST_LEVEL:
				if (resolve) return getSpillwayCrestLevel();
				return basicGetSpillwayCrestLevel();
			case ProductionPackage.RESERVOIR__SPILL_WAY_GATE_TYPE:
				return getSpillWayGateType();
		}
		return super.eGet(featureID, resolve, coreType);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	@Override
	public void eSet(int featureID, Object newValue) {
		switch (featureID) {
			case ProductionPackage.RESERVOIR__ACTIVE_STORAGE_CAPACITY:
				setActiveStorageCapacity((Volume)newValue);
				return;
			case ProductionPackage.RESERVOIR__ENERGY_STORAGE_RATING:
				setEnergyStorageRating((EA_Model.IEC61970.Domain.Float)newValue);
				return;
			case ProductionPackage.RESERVOIR__FULL_SUPPLY_LEVEL:
				setFullSupplyLevel((WaterLevel)newValue);
				return;
			case ProductionPackage.RESERVOIR__GROSS_CAPACITY:
				setGrossCapacity((Volume)newValue);
				return;
			case ProductionPackage.RESERVOIR__NORMAL_MIN_OPERATE_LEVEL:
				setNormalMinOperateLevel((WaterLevel)newValue);
				return;
			case ProductionPackage.RESERVOIR__RIVER_OUTLET_WORKS:
				setRiverOutletWorks((EA_Model.IEC61970.Domain.String)newValue);
				return;
			case ProductionPackage.RESERVOIR__SPILL_TRAVEL_DELAY:
				setSpillTravelDelay((Seconds)newValue);
				return;
			case ProductionPackage.RESERVOIR__SPILLWAY_CAPACITY:
				setSpillwayCapacity((EA_Model.IEC61970.Domain.Float)newValue);
				return;
			case ProductionPackage.RESERVOIR__SPILLWAY_CREST_LENGTH:
				setSpillwayCrestLength((Length)newValue);
				return;
			case ProductionPackage.RESERVOIR__SPILLWAY_CREST_LEVEL:
				setSpillwayCrestLevel((WaterLevel)newValue);
				return;
			case ProductionPackage.RESERVOIR__SPILL_WAY_GATE_TYPE:
				setSpillWayGateType((SpillwayGateType)newValue);
				return;
		}
		super.eSet(featureID, newValue);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	@Override
	public void eUnset(int featureID) {
		switch (featureID) {
			case ProductionPackage.RESERVOIR__ACTIVE_STORAGE_CAPACITY:
				setActiveStorageCapacity((Volume)null);
				return;
			case ProductionPackage.RESERVOIR__ENERGY_STORAGE_RATING:
				setEnergyStorageRating((EA_Model.IEC61970.Domain.Float)null);
				return;
			case ProductionPackage.RESERVOIR__FULL_SUPPLY_LEVEL:
				setFullSupplyLevel((WaterLevel)null);
				return;
			case ProductionPackage.RESERVOIR__GROSS_CAPACITY:
				setGrossCapacity((Volume)null);
				return;
			case ProductionPackage.RESERVOIR__NORMAL_MIN_OPERATE_LEVEL:
				setNormalMinOperateLevel((WaterLevel)null);
				return;
			case ProductionPackage.RESERVOIR__RIVER_OUTLET_WORKS:
				setRiverOutletWorks((EA_Model.IEC61970.Domain.String)null);
				return;
			case ProductionPackage.RESERVOIR__SPILL_TRAVEL_DELAY:
				setSpillTravelDelay((Seconds)null);
				return;
			case ProductionPackage.RESERVOIR__SPILLWAY_CAPACITY:
				setSpillwayCapacity((EA_Model.IEC61970.Domain.Float)null);
				return;
			case ProductionPackage.RESERVOIR__SPILLWAY_CREST_LENGTH:
				setSpillwayCrestLength((Length)null);
				return;
			case ProductionPackage.RESERVOIR__SPILLWAY_CREST_LEVEL:
				setSpillwayCrestLevel((WaterLevel)null);
				return;
			case ProductionPackage.RESERVOIR__SPILL_WAY_GATE_TYPE:
				setSpillWayGateType(SPILL_WAY_GATE_TYPE_EDEFAULT);
				return;
		}
		super.eUnset(featureID);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	@Override
	public boolean eIsSet(int featureID) {
		switch (featureID) {
			case ProductionPackage.RESERVOIR__ACTIVE_STORAGE_CAPACITY:
				return activeStorageCapacity != null;
			case ProductionPackage.RESERVOIR__ENERGY_STORAGE_RATING:
				return energyStorageRating != null;
			case ProductionPackage.RESERVOIR__FULL_SUPPLY_LEVEL:
				return fullSupplyLevel != null;
			case ProductionPackage.RESERVOIR__GROSS_CAPACITY:
				return grossCapacity != null;
			case ProductionPackage.RESERVOIR__NORMAL_MIN_OPERATE_LEVEL:
				return normalMinOperateLevel != null;
			case ProductionPackage.RESERVOIR__RIVER_OUTLET_WORKS:
				return riverOutletWorks != null;
			case ProductionPackage.RESERVOIR__SPILL_TRAVEL_DELAY:
				return spillTravelDelay != null;
			case ProductionPackage.RESERVOIR__SPILLWAY_CAPACITY:
				return spillwayCapacity != null;
			case ProductionPackage.RESERVOIR__SPILLWAY_CREST_LENGTH:
				return spillwayCrestLength != null;
			case ProductionPackage.RESERVOIR__SPILLWAY_CREST_LEVEL:
				return spillwayCrestLevel != null;
			case ProductionPackage.RESERVOIR__SPILL_WAY_GATE_TYPE:
				return spillWayGateType != SPILL_WAY_GATE_TYPE_EDEFAULT;
		}
		return super.eIsSet(featureID);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	@Override
	public String toString() {
		if (eIsProxy()) return super.toString();

		StringBuffer result = new StringBuffer(super.toString());
		result.append(" (spillWayGateType: ");
		result.append(spillWayGateType);
		result.append(')');
		return result.toString();
	}

} //ReservoirImpl
